package br.ykhan.sql.sqandal.elements;

public class Column implements Element{

	private String name;
	private String alias;
	private Table table;
	
	public Column(String name, Table table) {
		this.name = name;
		this.table = table;
	}
	
	public Column(String name, String alias, Table table) {
		this.name = name;
		this.alias = alias;
		this.table = table;
	}
	
	/**
	 * Retorna String com o nome da declaração da Coluna.<p>
	 * Exemplo:<br>
	 * <b>Pessoa.NomePessoa as Nome</b>
	 */
	public String getDeclarationName(){
		StringBuffer str = new StringBuffer();
		
		if(table.getAlias() != null)
			str.append(table.getAlias()+".");
		else
			str.append(table.getName()+".");
		
		str.append(name);
		
		if(alias != null && !alias.isEmpty())
			str.append(" AS "+alias);
		
		return str.toString();
	}
	
	/**
	 * Retorna String com o nome de referência da Coluna.<p>
	 * Exemplo:<br>
	 * <b>Pessoa.NomePessoa</b>
	 */
	public String getReferenceName(){
		StringBuffer str = new StringBuffer();
		
		if(table.getAlias() != null)
			str.append(table.getAlias()+".");
		else
			str.append(table.getName()+".");
		
		if(alias != null && !alias.isEmpty())
			str.append(alias);
		else
			str.append(name);
		
		return str.toString();
	}
	
	@Override
	public boolean equals(Object obj){
		
		if(!(obj instanceof Column)) return false;
		
		Column col = (Column)obj;
		
		return this == col || (
			this.name.equalsIgnoreCase(col.getName()) && 
			this.alias.equalsIgnoreCase(col.getAlias()) && 
			this.table.equals(col.getTable()));
		
	}	
	
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }

	public String getAlias() { return alias; }
	public void setAlias(String alias) { this.alias = alias; }
	
	public Table getTable() { return table; }
	public void setTable(Table table) { this.table = table; }

}

